package com.yqs.controller;

import com.github.pagehelper.Page;
import com.yqs.model.entity.Result;
import com.yqs.model.entity.User;
import com.yqs.model.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Ye QS
 * @version 0.1
 * @className UserController
 * @description
 * @date 2024/8/21 14:18
 * @since jdk11
 */
@RestController
public class UserController {
    @Autowired
    private IUserService userService;

    @RequestMapping("/toList")
    public ModelAndView toList() {
        return new ModelAndView("list");
    }

    /**
     * 通过分页查询用户信息的方法。
     *
     * @param pageNum  当前页码
     * @param pageSize 每页显示的数据量
     * @param user     用户对象（用于模糊查询）
     * @return 包含查询结果和相关分页信息的集合
     */
    @RequestMapping("/getPage")
    public Map<String, Object> queryUserByPage(int pageNum, int pageSize, User user) {
        // 创建一个HashMap用来存储返回的结果数据
        Map<String, Object> resultMap = new HashMap<>();

        // 设置每页显示多少条记录
        resultMap.put("pageSize", pageSize);

        // 设置当前是第几页
        resultMap.put("pageNum", pageNum);

        // 将传入的user对象放入map中，该对象可能包含一些搜索条件
        resultMap.put("user", user);

        // 调用userService中的queryLikeUsers方法执行具体的分页查询操作，并将上述Map作为参数传递进去
        Page page = userService.queryLikeUsers(resultMap);

        // 查询完成后，将查询得到的page对象存入resultMap中
        resultMap.put("page", page);

        // 计算总页数并将其存入resultMap中
        resultMap.put("totalPage", page.getPages());

        // 返回最终封装好的集合
        return resultMap;
    }

    // 使用 @RequestMapping 注解来映射 HTTP 请求路径为 "/add"，处理新增用户请求的方法。
    @RequestMapping("/add")
    public Result adduser(User user) {  // 接收 User 类型的对象作为参数，并返回 Result 类型的结果。

        // 调用 userService 中的 addUser 方法，传入从客户端接收到的 User 对象，执行数据库插入操作。
        int i = userService.addUser(user);

        // 返回一个新的 Result 对象表示响应结果。
        return new Result();

    }

    // 使用 @RequestMapping 注解来映射 HTTP 请求路径为 "/del"，处理删除用户请求的方法。
    @RequestMapping("/del")
    public Result del(User user) {  // 接收 User 类型的对象作为参数，并返回 Result 类型的结果。

        // 调用 userService 中的 delUser 方法，传入从客户端接收到的 User 对象，执行数据库删除操作。
        int i = userService.delUser(user);

        // 返回一个新的 Result 对象表示响应结果。
        return new Result();
    }


    /**
     * 查询单个用户详细信息
     *
     * @return
     */
    @RequestMapping("/editpage")
    public ModelAndView findUser(User user) {
        // 根据用户ID查询用户信息
        User rsUser = userService.getUser(user);

        // 创建一个Map对象，用于存储返回的数据
        Map<String, Object> rsMap = new HashMap<String, Object>();

        // 将查询到的用户数据放入Map中，键为"data"
        rsMap.put("data", rsUser);

        // 返回ModelAndView对象，将视图名称设置为"edit"，并将数据Map传入
        return new ModelAndView("edit", rsMap);
    }

    @RequestMapping("/edit")
    public Result editUser(User user) {
        // 更新用户信息
        userService.editUser(user);

        // 返回一个Result对象，表示操作成功
        return new Result();
    }

}
